/*
 * Created on 21-sep-2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package modelo.oad.util;

import java.util.ArrayList;
import java.util.List;

import modelo.oad.impl.ManagerOADImpl;

/**
 * @author ovejeror
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class CriterioBean {

	private String nombreCriterio;
	private Object valorCriterio;
	private Object valorCriterio2;
	private String tipoComparacion;
	 
	public CriterioBean(){}
	
	public CriterioBean(String nombre, Object valor, String comparacion)
	{
		this.nombreCriterio 	= 	nombre;
		this.valorCriterio		=	valor;
		this.tipoComparacion	=	comparacion;
	}
	
	public CriterioBean(String nombreCriterio,Object valorCriterio){
		this.nombreCriterio = nombreCriterio;
		this.valorCriterio = valorCriterio;
	}
	
	/**
	 * @return Returns the nombreCriterio.
	 */
	public String getNombreCriterio() {
		return nombreCriterio;
	}
	/**
	 * @param nombreCriterio The nombreCriterio to set.
	 */
	public void setNombreCriterio(String nombreCriterio) {
		this.nombreCriterio = nombreCriterio;
	}
	/**
	 * @return Returns the valorCriterio.
	 */
	public Object getValorCriterio() {
		return valorCriterio;
	}
	/**
	 * @param valorCriterio The valorCriterio to set.
	 */
	public void setValorCriterio(Object valorCriterio) {
		this.valorCriterio = valorCriterio;
	}

	public String getTipoComparacion() {
		return tipoComparacion;
	}

	public void setTipoComparacion(String tipoComparacion) {
		this.tipoComparacion = tipoComparacion;
	}
	
	public String getValorSQL()
	{
		String result = "";
		
		// Devolvemos la representacion del valor del criterio en formato SQL...
		
		if (valorCriterio == null)		
			result = "null";
		else if (valorCriterio.getClass().equals(String.class))	
			result = "'" + valorCriterio + "'";
		else if (valorCriterio.getClass().equals(java.util.Date.class))	
			result = "STR_TO_DATE('" + ManagerOADImpl.dateToString((java.util.Date) valorCriterio) + "','%m/%d/%Y')";
		else if (valorCriterio.getClass().equals(ArrayList.class)){
			result="(";
			List listaValores = (List)valorCriterio;
			for (int i=0;i<listaValores.size();i++){
				if(i>0)
					result+=",";
				if( listaValores.get(i).getClass().equals(String.class)) 
					result += "'" + listaValores.get(i) + "'";
				else
					result += listaValores.get(i).toString();
				}					
			result+=")";
		}
		else
			result = valorCriterio.toString();
		
		return result;
	}
	
	
	public String getValorSQL2()
	{
		String result = "";
		
		// Devolvemos la representacion del valor del criterio en formato SQL...
		
		if (valorCriterio2 == null)		
			result = "null";
		else if (valorCriterio2.getClass().equals(String.class))	
			result = "'" + valorCriterio2 + "'";
		else if (valorCriterio2.getClass().equals(java.util.Date.class))	
			result = "STR_TO_DATE('" + ManagerOADImpl.dateToString((java.util.Date)valorCriterio2) + "','%m/%d/%Y')";
		else if (valorCriterio2.getClass().equals(ArrayList.class)){
			result="(";
			List listaValores = (List)valorCriterio2;
			for (int i=0;i<listaValores.size();i++){
				if(i>0)
					result+=",";
				if( listaValores.get(i).getClass().equals(String.class)) 
					result += "'" + listaValores.get(i) + "'";
				else
					result += listaValores.get(i).toString();
				}					
			result+=")";
		}
		else
			result = valorCriterio2.toString();
		
		return result;
	}
	
	public String getComparacionSQL()
	{
		String result = "";
		
		// Devolvemos la representacion de la comparacion con el valor del criterio en formato SQL....
		
		if (tipoComparacion == null)
			// No se ha indicado el tipo de Comparacion...
			if (valorCriterio == null)
					result = nombreCriterio + " IS " + getValorSQL();
			else	result = nombreCriterio + CriteriosBusqueda.IGUAL + getValorSQL();		
		else if (tipoComparacion == CriteriosBusqueda.IN)
			if (valorCriterio == null)
				result = nombreCriterio + " IS " + getValorSQL();
			else
				result = nombreCriterio +" "+ tipoComparacion +" "+getValorSQL();
		else if(tipoComparacion ==CriteriosBusqueda.BETWEEN)
			result = "("+ "STR_TO_DATE(" + nombreCriterio +", '%m/%d/%Y' )" + " " +tipoComparacion+" " +getValorSQL()+" AND "+ getValorSQL2()+")";
		else if(tipoComparacion == CriteriosBusqueda.LIKE)
			result = "("+ nombreCriterio + " " + tipoComparacion + " " + getValorSQL()+ ")";
		else
			// SI se ha indicado el tipo de Comparacion...
			if (valorCriterio == null)
				// El valor a comparar es NULO
				if (tipoComparacion == CriteriosBusqueda.IGUAL)
						result = nombreCriterio + " IS " + getValorSQL();
				else if (tipoComparacion == CriteriosBusqueda.DISTINTO)
						result = nombreCriterio + " IS NOT " + getValorSQL();
				else	result = nombreCriterio + tipoComparacion + getValorSQL();
			else
				// El valor a comparar NO es nulo...
				result = nombreCriterio + tipoComparacion + getValorSQL();
	
		return result;
	}

	public Object getValorCriterio2() {
		return valorCriterio2;
	}

	public void setValorCriterio2(Object valorCriterio2) {
		this.valorCriterio2 = valorCriterio2;
	}
	
}
